from appium import webdriver
from appium_flutter_finder.flutter_finder import FlutterElement, FlutterFinder
import uiautomator2 as u2


class flutter_Util:

    def __init__(self, package_name, activity):
        self.driver = u2.connect_usb()
        self.driver.app_start(package_name=package_name, activity=activity)

    # 清除当前app软件缓存
    def clear_buffer(self):
        self.driver.app_clear(str(self.driver.app_current))

    # 获取当前窗口大小：垂直（1080，1920）、水平（1920，1080）
    def window_size(self):
        return self.driver.window_size()

    # 获取设备序列号
    def serial(self):
        return self.driver.serial

    # 获取当前设备ip地址
    def ip(self):
        return self.driver.wlan_ip

    # 获取当前设备信息
    def device_info(self):
        return self.driver.device_info

    # 获取当前app信息
    def get_app_info(self):
        return self.driver.app_info(str(self.driver.app_current))

    def locator(self, **kwargs):
        '''
        :param kwargs:
                text: 通过text属性定位
                resourceId: 通过resourceId定位
                className: 通过className定位
                xpath: 通过xpath定位（该内容需要通过内置函数实现，再次不建议使用，定位不准确不方便使用）「废弃」
                description: 通过description定位
        :return: 查找到的元素
        '''
        return self.driver(**kwargs)

        # 点击元素

    def click(self, timeout=None, offset=None, **kwargs):
        '''
        :param timeout: 延迟后进行操作
        :param offset: （x坐标，y坐标）点击元素偏向的坐标点
        :param kwargs:
                text: 通过text属性定位
                resourceId: 通过resourceId定位
                className: 通过className定位
                description: 通过description定位
        :return:
        '''
        self.locator(**kwargs).click(timeout, offset)

    def move_to(self, x, y, **kwargs):
        '''
        :param x: x轴坐标
        :param y: y轴坐标
        :param kwargs:
                text: 通过text属性定位
                resourceId: 通过resourceId定位
                className: 通过className定位
                description: 通过description定位
        :return:
        '''
        self.locator(**kwargs).drag_to(x, y)

    # 获取元素的控件
    def get_text(self, timeout=None, **kwargs):
        return self.locator(**kwargs).get_text(timeout)

    def input(self, info, **kwargs):
        self.click(**kwargs)
        self.driver.set_fastinput_ime(True)
        self.driver.send_keys(info)
        self.driver.set_fastinput_ime(False)

    # 停止当前app应用
    def stop_app(self):
        self.driver.app_stop(self.driver.app_current)
